/*=====================
* 名称: newScroller
* 功能: 滑动翻页
* 作者: zjsina-pp
* 版本: 0.1.0
* 创建时间: 2014-8-4
* 更新时间: 2014-8-4
======================*/
//xxx = document.querySelectorAll ? _this.container.querySelectorAll('input, textarea, select') : $$(_this.container).find('input, textarea, select');
var newScroller = function(selector, params) {
	/*=========================
	 Create selector
	 ===========================*/
	if (!document.querySelectorAll) {
		if (!window.jQuery)
			return;
	}
	function $$(s) {
		if (document.querySelectorAll)
			return document.querySelectorAll(s);
		else
			return jQuery(s);
	}

	if (!window.getComputedStyle) {
		window.getComputedStyle = function(el) {
			var style = null;
			if (window.getComputedStyle) {
				style = window.getComputedStyle(el, null);
			} else {
				style = el.currentStyle;
			}

			return style;
		}
	}
	/*=========================
	 Check for correct selector
	 ===========================*/
	if ( typeof selector === 'undefined')
		return;

	if (!(selector.nodeType)) {
		if ($$(selector).length === 0)
			return;
	}
	/*=========================
	 _this
	 ===========================*/
	var _this = this;
	/*=========================
	Default Flags and vars
	===========================*/
	//touche event
	_this.touches = {
		start : 0,
		startX : 0,
		startY : 0,
		current : 0,
		currentX : 0,
		currentY : 0,
	};
	//mouse event
	_this.clicks = {
		start : 0,
		startX : 0,
		startY : 0,
		current : 0,
		currentX : 0,
		currentY : 0,
	};
	//MoveBox position
	_this.positions = {
		startLeft : 0,
		currentLeft : 0,
		startTop : 0,
		currentTop : 0,
	};
	/*=========================
	 Default Parameters
	 ===========================*/
	var defaults = {
		mode : 'vertical', // or 'horizontal'
		speed : 20,
		scrollerElement : 'div',
		scrollerMoveBox : '.newScroller-movebox',
		scrollerArea : '.newScroller-scroller-contain',
		scroller : '.newScroller-scroller',
		callback : function(res) {
		}
	}
	params = params || {};
	for (var prop in defaults) {
		if (!( prop in params)) {
			params[prop] = defaults[prop]
		}
	}
	_this.params = params;
	_this.contain = (selector.nodeType) ? selector : $$(selector)[0];
	_this.movebox = (_this.params.scrollerMoveBox.nodeType) ? _this.params.scrollerMoveBox : $$(_this.params.scrollerMoveBox)[0];
	/*=========================
	 Scroller init
	 ===========================*/
	var isV = params.mode === 'vertical';
	_this.containValue = isV ? _this.h.getHeight(_this.contain) : _this.h.getWidth(_this.contain);
	_this.moveboxValue = isV ? _this.h.getHeight(_this.movebox) : _this.h.getWidth(_this.movebox);
	_this.nscrollValue = Math.pow(_this.containValue, 2) / _this.moveboxValue;
	_this.measure = (_this.moveboxValue - _this.containValue) / (_this.containValue - _this.nscrollValue);
	/*==========================================
	 Event Listeners
	 ============================================*/
	if (_this.support.touch) {
		//_this.h.addEventListener(_this.contain, 'touchstart', onTouchStart, false);
		//_this.h.addEventListener(_this.contain, 'touchmove', onTouchMove, false);
		//_this.h.addEventListener(_this.contain, 'touchend', onTouchEnd, false);
	} else {
	
	}

	/*==================================================
	 Event Handlers
	 ====================================================*/
	var isTouchEvent = false;
	var allowThresholdMove;
	var allowMomentumBounce = true;
	function onTouchStart(event) {
	}

}
newScroller.prototype = {
	/*==================================================
	 Helpers
	 ====================================================*/
	h : {
		getWidth : function(el) {
			return parseFloat(window.getComputedStyle(el).width);
		},
		getHeight : function(el) {
			return parseFloat(window.getComputedStyle(el).height);
		},
		getOffset : function(el) {
			var box = el.getBoundingClientRect();
			var body = document.body;
			var clientTop = el.clientTop || body.clientTop || 0;
			var clientLeft = el.clientLeft || body.clientLeft || 0;
			var scrollTop = window.pageYOffset || el.scrollTop;
			var scrollLeft = window.pageXOffset || el.scrollLeft;
			if (document.documentElement && !window.pageYOffset) {
				//IE7-8
				scrollTop = document.documentElement.scrollTop;
				scrollLeft = document.documentElement.scrollLeft;
			}
			return {
				top : box.top + scrollTop - clientTop,
				left : box.left + scrollLeft - clientLeft
			};
		},
		addEventListener : function(el, event, listener, useCapture) {
			if (el.addEventListener) {
				el.addEventListener(event, listener, useCapture)
			} else if (el.attachEvent) {
				el.attachEvent('on' + event, listener)
			}
		},
		removeEventListener : function(el, event, listener, useCapture) {
			if (el.removeEventListener) {
				el.removeEventListener(event, listener, useCapture)
			} else if (el.detachEvent) {
				el.detachEvent('on' + event, listener)
			}
		}
	},
	/*==================================================
	 Feature Detection
	 ====================================================*/
	support : {
		touch : (window.Modernizr && Modernizr.touch === true) || (function() {
			return !!(("ontouchstart" in window) || window.DocumentTouch && document instanceof DocumentTouch);
		})()
	},
	browser : {

	}
}
/*=========================
 jQuery create scroller
 ===========================*/
if (window.jQuery) {
	(function($) {
		$.fn.scroller = function(params) {
			var s = new newScroller($(this)[0], params)
			$(this).data('scroller', s);
			return s;
		}
	})(window.jQuery)
}